<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 【常量声明const】
        // const声明一个只读的常量。一旦声明，常量的值就不能改变。

        // 【语法】
        // 声明并设置初始值 
        const y = 10;

        //【注意点1-基本类型数据无法重新赋值】 
        const PI =3.141592653589793;
        console.log(PI);//3.141592653589793
        // PI = 3;
        // console.log(PI); //Assignment to constant variable.(赋值给常量变量。)

        // 【注意点2-必须设置初始值】
        // const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值
        // const foo;
        // console.log(foo); //Missing initializer.(缺少初始值)
        // 只声明不赋值,就会报错。

        // 【注意点3-有块级作用域】
        // const的作用域和let命令相同:只在声明的块级作用域内有效 
        if(true){
            const MAX =5;
            console.log(MAX);
        }
        // console.log(MAX); // MAX is not defined
        // 【注意点4-不会变量提升】
        // const命令声明的常量也是不能提升,同样存在暂时性死区,只能在声明的位置后面使用。 
        if(true) {
            console.log(MAX); //Cannot access 'MAX' before initialization 
            const MAX =5;
        }
        //【注意点5-不能重复声明】
        // let age = 18;
        // const age = 30;

        // 【总结】
        // 1.基本数据类型无法重新赋值(引用类型可以更改内容)
        //2.必须设置初始值
        // 3.有块级作用域
        // 4.不会变量提升
        // 5.不能重复声明
        </script>
</body>
</html>